import Vue from 'vue'
import Vuex from 'vuex'
import {
  Global,
  Api,
  Util
} from "@utils/global.js";

Vue.use(Vuex);

// common module
const moduleCommon = {
  state: {
    categoryList: null,
    subCategoryList: null,
    overflow: false,
    loading: false,
    isBottom: false, // 是否滚动条到最底部
    isAddCart:false,//是否添加到购物车
    params: Util.getUrlAllParam(), // all params in url
    listData: [], // 一级分类数据·
    cartNumerShow:null,//购物车图标是否显示
    hasRegist:true,//注册有礼是否显示
    isScroll:false,//是否滚动
    scrollTopVal:null,//
  },
  mutations: {
    loading(state, data) {
      state.loading = data;
    },
    isBottom(state, data) {
      state.isBottom = data;
    },
    overflow(state, data) {
      state.overflow = data;
    },
    page(state, data) {
      state.page = data;
    },
    categoryList(state, data) {
      state.categoryList = data;
    },
    subCategoryList(state, data) {
      state.subCategoryList = data;
    },
    authorization(state, data) {
      //console.log(data);
      Util.cookie.addCookie('authorization', `Bearer ${data.token}`);
      Util.cookie.addCookie('openid', `${data.openid}`);
      Util.cookie.addCookie('unionid', `${data.unionid}`);
      Util.cookie.addCookie('channel', `${data.channel}`);
      Util.cookie.addCookie('headimgurl', `${data.headimgurl}`);
    },
    cartNumerShow(state,data){ //购物车数量获取
      state.cartNumerShow = data;
    },
    hasRegist(state,data){
      state.hasRegist = data;
    },
    isScroll(state,data){
      state.isScroll = data;
    },
    scrollTopVal(state,data){
      state.scrollTopVal = data;
    }
    // cartNumer(state,data){
    //   state.cartNumer = data;
    // },
    // initCategory(state, data) {
    //   this.dispatch('getCategory').then(() => {
    //     if (!state.categoryList) return;
    //     this.dispatch('getCategoryByCode', {
    //       code: state.categoryList[0].code
    //     });
    //   });
    // }
  },
  actions: {
    getAuthenicate({
      commit,
      state
    }) {
      return new Promise((resolve, reject) => {
        if (state.params.state == "bosestate" && state.params.code && Global.appid) {
          Api.ajax({
            key: "getAuthenicate",
            type: 'POST',
            data: {
              code: state.params.code,
              channel: 'publicAccounts',
              encryptedData: '',
              iv: ''
            }
          }).then(
            res => {
              commit('authorization', res);
              resolve();
            },
            res => {
              reject();
            }
          );
        } else {
          reject();
        }
      });
    },
    listenToAddCart({
      commit,
      state
    },callback){
      // if (state.cartNumerShow) return;
      Api.ajax({
        key: 'getCartTotalQuantity'
      }).then((res) => {
        commit('cartNumerShow', res);
        // commit('cartNumer', res);
        return res;
      }, () => {

      });
      // if(callback) callback();
      // return 1;
    },
    // getCartNumber({
    //   commit,
    //   state
    // },options){
    //   Api.ajax({
    //     key: 'getCartTotalQuantity'
    //   }).then((res) => {
    //     commit('cartNumer', res);
    //     return res;
    //   }, () => {

    //   });
    // },
    // 获取一级分类
    // getCategory({
    //   commit,
    //   state
    // }, callback) {
    //   var _this = this;
    //   if (state.categoryList) return;
    //   return Api.ajax({
    //     key: 'getCategories'
    //   }).then((res) => {
    //     commit('categoryList', res);
    //     if (callback) callback(res);
    //     return res;
    //   }, (res) => {});
    // },
    // 获取二级分类
    // getCategoryByCode({
    //   commit,
    //   state
    // }, options) {
    //   Api.ajax({
    //     key: 'getCategoriesByCode',
    //     data: {
    //       categorycode: options.code
    //     }
    //   }).then((res) => {
    //     commit('subCategoryList', res);
    //     return res;
    //   }, () => {

    //   });
    // },
    init({
      commit,
      state
    }, callback) {
      if (!Util.cookie.getCookie('authorization')) {
        this.dispatch('getAuthenicate').then(() => {          
          this.dispatch("listenToAddCart");
          if (callback) callback();
        }, () => {
          if (Global.appid) window.location.href = Global.getAuthorizeUrl();
          else { // 本地测试            
            this.dispatch("listenToAddCart");
            if (callback) callback();
          }
        });
      } else {
        
        this.dispatch("listenToAddCart");
        if (callback) callback();
      }
    }
  }
}

const store = new Vuex.Store({
  modules: {
    common: moduleCommon
  }
});

export default store;
